home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / packet / terminal / kam510 / kam-nts.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-11-26  |  23.4 KB  |  721 lines

  1. {$F+} PROCEDURE NTSAutoHelp;
  2. begin
  3.   ClearEOL(10,24);
  4.   case SGFieldCode of
  5.        1 : AT(10,24,'Enter message number');
  6.        2 : AT(10,24,'Precedence : Routine, Priority, Welfare, Emergency');
  7.        3 : AT(10,24,'Handling Instructions: A, B, C, D, E, F, G <F10> for list');
  8.        4 : AT(10,24,'Extension required for A, B, and F handling instructions');
  9.        5 : AT(10,24,'Originating station');
  10.        6 : AT(10,24,'Place of origin ie: Cape May NJ');
  11.        7 : AT(10,24,'File time ... <F10> for system time');
  12.        8 : AT(10,24,'File month');
  13.        9 : AT(10,24,'File day  1..31');
  14.        10: AT(10,24,'Addressee name');
  15.        11: AT(10,24,'Addressee address #1');
  16.        12: AT(10,24,'Addressee address #2');
  17.        13: AT(10,24,'Addressee city');
  18.        14: AT(10,24,'Addressee State  <F10> for list');
  19.        15: AT(10,24,'Addressee Zip Code');
  20.        16: AT(10,24,'Addressee phone number');
  21.        17: AT(10,24,'Message line #1');
  22.        18: AT(10,24,'Message line #2');
  23.        19: AT(10,24,'Message line #3');
  24.        20: AT(10,24,'Message line #4');
  25.        21: AT(10,24,'Message line #5');
  26.        22: AT(10,24,'Sendee name');
  27.        23: AT(10,24,'Sendee address #1');
  28.        24: AT(10,24,'Sendee address #2');
  29.        25: AT(10,24,'Sendee city');
  30.        26: AT(10,24,'Sendee State <F10> for list');
  31.        27: AT(10,24,'Sendee Zip Code');
  32.        28: AT(10,24,'Sendee phone number');
  33.    end;
  34. end;
  35. {$F-}
  36.  
  37. {$F+} FUNCTION NTSStateName(Var n : integer): String;
  38. begin
  39.   case n of
  40.     1 : NTSStateName := 'Alabama';
  41.     2 : NTSStateName := 'Alaska';
  42.     3 : NTSStateName := 'Arizona';
  43.     4 : NTSStateName := 'Arkansas';
  44.     5 : NTSStateName := 'California';
  45.     6 : NTSStateName := 'Colorado';
  46.     7 : NTSStateName := 'Connecticut';
  47.     8 : NTSStateName := 'Delaware';
  48.     9 : NTSStateName := 'Dist. of Col.';
  49.    10 : NTSStateName := 'Florida';
  50.    11 : NTSStateName := 'Georgia';
  51.    12 : NTSStateName := 'Hawaii';
  52.    13 : NTSStateName := 'Idaho';
  53.    14 : NTSStateName := 'Illinois';
  54.    15 : NTSStateName := 'Indiania';
  55.    16 : NTSStateName := 'Iowa';
  56.    17 : NTSStateName := 'Kansas';
  57.    18 : NTSStateName := 'Kentucky';
  58.    19 : NTSStateName := 'Louisiana';
  59.    20 : NTSStateName := 'Maine';
  60.    21 : NTSStateName := 'Maryland';
  61.    22 : NTSStateName := 'Mass.';
  62.    23 : NTSStateName := 'Michigan';
  63.    24 : NTSStateName := 'Minnesota';
  64.    25 : NTSStateName := 'Mississippi';
  65.    26 : NTSStateName := 'Missouri';
  66.    27 : NTSStateName := 'Montana';
  67.    28 : NTSStateName := 'Nebraska';
  68.    29 : NTSStateName := 'Nevada';
  69.    30 : NTSStateName := 'New Hampshire';
  70.    31 : NTSStateName := 'New Jersey';
  71.    32 : NTSStateName := 'New Mexico';
  72.    33 : NTSStateName := 'New York';
  73.    34 : NTSStateName := 'North Carolina';
  74.    35 : NTSStateName := 'North Dakota';
  75.    36 : NTSStateName := 'Ohio';
  76.    37 : NTSStateName := 'Oklahoma';
  77.    38 : NTSStateName := 'Oregon';
  78.    39 : NTSStateName := 'Pennsylvania';
  79.    40 : NTSStateName := 'Rhode Island';
  80.    41 : NTSStateName := 'South Carolina';
  81.    42 : NTSStateName := 'South Dakota';
  82.    43 : NTSStateName := 'Tennessee';
  83.    44 : NTSStateName := 'Texas';
  84.    45 : NTSStateName := 'Utah';
  85.    46 : NTSStateName := 'Vermont';
  86.    47 : NTSStateName := 'Virginia';
  87.    48 : NTSStateName := 'Washington';
  88.    49 : NTSStateName := 'West Virginia';
  89.    50 : NTSStateName := 'Wisconsin';
  90.    51 : NTSStateName := 'Wyoming';
  91.    52 : NTSStateName := 'Puerto Rico';
  92.   end;
  93. end;
  94. {$F-}
  95.  
  96. {$F+} PROCEDURE NTSStatePickList;
  97. var i : integer;
  98. begin
  99.   Set_PickWindow_To(60,4,79,22,2,'Select State');
  100.   i := PickList(@NTSStateName,1,51,1);
  101.   case i of
  102.     0 : ;
  103.     1 : SGBuffer^ := 'AL';
  104.     2 : SGBuffer^ := 'AK';
  105.     3 : SGBuffer^ := 'AZ';
  106.     4 : SGBuffer^ := 'AR';
  107.     5 : SGBuffer^ := 'CA';
  108.     6 : SGBuffer^ := 'CO';
  109.     7 : SGBuffer^ := 'CT';
  110.     8 : SGBuffer^ := 'DE';
  111.     9 : SGBuffer^ := 'DC';
  112.    10 : SGBuffer^ := 'FL';
  113.    11 : SGBuffer^ := 'GA';
  114.    12 : SGBuffer^ := 'HA';
  115.    13 : SGBuffer^ := 'ID';
  116.    14 : SGBuffer^ := 'IL';
  117.    15 : SGBuffer^ := 'IN';
  118.    16 : SGBuffer^ := 'IO';
  119.    17 : SGBuffer^ := 'KA';
  120.    18 : SGBuffer^ := 'KY';
  121.    19 : SGBuffer^ := 'LA';
  122.    20 : SGBuffer^ := 'ME';
  123.    21 : SGBuffer^ := 'MD';
  124.    22 : SGBuffer^ := 'MA';
  125.    23 : SGBuffer^ := 'MI';
  126.    24 : SGBuffer^ := 'MN';
  127.    25 : SGBuffer^ := 'MS';
  128.    26 : SGBuffer^ := 'MO';
  129.    27 : SGBuffer^ := 'MN';
  130.    28 : SGBuffer^ := 'NE';
  131.    29 : SGBuffer^ := 'NV';
  132.    30 : SGBuffer^ := 'NH';
  133.    31 : SGBuffer^ := 'NJ';
  134.    32 : SGBuffer^ := 'NM';
  135.    33 : SGBuffer^ := 'NY';
  136.    34 : SGBuffer^ := 'NC';
  137.    35 : SGBuffer^ := 'ND';
  138.    36 : SGBuffer^ := 'OH';
  139.    37 : SGBuffer^ := 'OK';
  140.    38 : SGBuffer^ := 'OR';
  141.    39 : SGBuffer^ := 'PA';
  142.    40 : SGBuffer^ := 'RI';
  143.    41 : SGBuffer^ := 'SC';
  144.    42 : SGBuffer^ := 'SD';
  145.    43 : SGBuffer^ := 'TN';
  146.    44 : SGBuffer^ := 'TX';
  147.    45 : SGBuffer^ := 'UT';
  148.    46 : SGBuffer^ := 'VT';
  149.    47 : SGBuffer^ := 'VI';
  150.    48 : SGBuffer^ := 'WA';
  151.    49 : SGBuffer^ := 'WV';
  152.    50 : SGBuffer^ := 'WI';
  153.    51 : SGBuffer^ := 'WY';
  154.    52 : SGBuffer^ := 'PR';
  155.   end;
  156. end;
  157.  
  158. {$F+} FUNCTION NTSHandlingInst(var n: integer): String;
  159. begin
  160.   case n of
  161.    1 : NTSHandlingInst := 'A - Collect landline delivery authorized ... miles';
  162.    2 : NTSHandlingInst := 'B - Cancel if not delivered with ... hrs of filing';
  163.    3 : NTSHandlingInst := 'C - Report date & time of delivery to originator';
  164.    4 : NTSHandlingInst := 'D - Report receiver, relay, date, time & method';
  165.    5 : NTSHandlingInst := 'E - Get reply & originate message back';
  166.    6 : NTSHandlingInst := 'F - Hold delivery until .... date';
  167.    7 : NTSHandlingInst := 'G - Delivery by mail or toll not required';
  168.   end;
  169. end;
  170. {$F-}
  171.  
  172. {$F+} PROCEDURE NTSHandlingPickList;
  173. var i : integer;
  174. begin
  175.   Set_PickWindow_To(15,10,67,18,2,'Valid Handling Instructions');
  176.   i := PickList(@NTSHandlingInst,1,7,1);
  177.   case i of
  178.     0 : ;
  179.     1 : SGBuffer^ := 'A';
  180.     2 : SGBuffer^ := 'B';
  181.     3 : SGBuffer^ := 'C';
  182.     4 : SGBuffer^ := 'D';
  183.     5 : SGBuffer^ := 'E';
  184.     6 : SGBuffer^ := 'F';
  185.     7 : SGBuffer^ := 'G';
  186.   end;
  187. end;
  188. {$F-}
  189.  
  190. {$F+} PROCEDURE NTSEnterSystemTime;
  191. var TimeStr : string[8];
  192. begin
  193.   TimeStr := SystemTime;
  194.   TimeStr[3] := TimeStr[4];
  195.   TimeStr[4] := TimeStr[5];
  196.   TimeStr[0] := chr(4);
  197.   SGBuffer^ := TimeStr;
  198. end;
  199. {$F-}
  200.  
  201. {$F+} PROCEDURE NTSF10Help;
  202. begin
  203.   case SGFieldCode of
  204.     3 : NTSHandlingPickList;
  205.     7 : NTSEnterSystemTime;
  206.     14, 26 : NTSStatePickList;
  207.   end;
  208. end;
  209. {$F-}
  210.  
  211. {$F+} PROCEDURE NTSCountWords;
  212. var i, wds : integer;
  213.     wrdend : boolean;
  214. begin
  215.   wds := 0;
  216.   with NTSHamGram do
  217.     begin
  218.       wrdend := TRUE;
  219.       for i := 1 to Length(_TEXT_1) do
  220.       begin
  221.         if (wrdend = TRUE) AND
  222.            (_TEXT_1[i] in ['A'..'z','0'..'9']) then
  223.           begin
  224.             inc(wds);
  225.             wrdend := FALSE;
  226.           end;
  227.         if _TEXT_1[i] = ' ' then
  228.             wrdend := TRUE;
  229.       end;
  230.       wrdend := TRUE;
  231.       for i := 1 to Length(_TEXT_2) do
  232.       begin
  233.         if (wrdend = TRUE) AND
  234.            (_TEXT_2[i] in ['A'..'z','0'..'9']) then
  235.           begin
  236.             inc(wds);
  237.             wrdend := FALSE;
  238.           end;
  239.         if _TEXT_2[i] = ' ' then
  240.             wrdend := TRUE;
  241.       end;
  242.       wrdend := TRUE;
  243.       for i := 1 to Length(_TEXT_3) do
  244.       begin
  245.         if (wrdend = TRUE) AND
  246.            (_TEXT_3[i] in ['A'..'z','0'..'9']) then
  247.           begin
  248.             inc(wds);
  249.             wrdend := FALSE;
  250.           end;
  251.         if _TEXT_3[i] = ' ' then
  252.             wrdend := TRUE;
  253.       end;
  254.     end;
  255.   gotoxy(67,21);
  256.   NTSWordCount := wds;
  257.   write(NTSWordCount:3);
  258. end;
  259. {$F-}
  260.  
  261. {$F+} PROCEDURE NTSHelpScreen;
  262. { Displays a list of menu commands when <F1> or "H" is pressed }
  263. VAR ScreenBuffer : Array[1..2000] OF Word;
  264. BEGIN
  265.   FillPage(@ScreenBuffer); { save contents of current screen }
  266.   Window(5,4,75,23);
  267.   Set_Color_To(Black,LightGray,Black,LightGray);
  268.   ClrScr;
  269.   WriteLn('                         Menu Commands');
  270.   WriteLn;
  271.   WriteLn('  N - Next      Skips to and displays next record in file');
  272.   WriteLn('  P - Prev      Skips back one and displays prior record');
  273.   WriteLn('  T - Top       Displays first record in file');
  274.   WriteLn('  O - Bottom    Displays last record in file');
  275.   WriteLn('  G - Go        Positions database on selected record by number');
  276.   WriteLn('  S - Search    Allows searching for imbedded string in key field');
  277.   WriteLn('  E - Edit      Allows modification of currently displayed record');
  278.   WriteLn('  A - Add       Allows input and appends a new record into database');
  279.   WriteLn('  D - Delete    Marks or unmarks current record for deletion by Pack');
  280.   WriteLn('  B - Browse    Spreadsheet-like view of database');
  281.   WriteLn('  C - Pack      Purges database of all records marked for deletion');
  282.   WriteLn('  W - Write     Write standard ARRL NTSHamGram Format for this record');
  283.   WriteLn('  Q - Quit      Quit viewing of database');
  284.   WriteLn;
  285.   Wait('                        Press any key to return...');
  286.   Window(1,1,80,25);
  287.   SayGetColors;
  288.   DisplayPage(@ScreenBuffer); { restore prior screen }
  289. END;   { NTSHelpScreen }
  290. {$F-}
  291.  
  292. PROCEDURE NTSSrchMsgNbr;
  293.  { Sequential search of entire file to find NTSMsgNbr in MSG_NBR }
  294.  { Searches faster if no index is active. }
  295. BEGIN
  296.   SayGet(1,25,' Enter MSG_NBR to locate: ',NTSMsgNbr,_S,4,0);
  297.     Picture('@!');
  298.   Set_Repaint_Off;  { leave field in reverse video on screen }
  299.   ReadGets;
  300.   Set_Repaint_On;   { restore default setting }
  301.   IF EditResult > 0 THEN
  302.     BEGIN
  303.       ClearEOL(1,25);
  304.       Exit;
  305.     END;
  306.   IF NTSMsgNbr <> '' THEN
  307.     BEGIN
  308.       NTSRecNo := RecNo; { save current position }
  309.       NTSm_Found := False;
  310.       GoTop;            { start at top of file (omit as desired) }
  311.       REPEAT
  312.         IF NTSMsgNbr = NTSHamGram._MSG_NBR THEN
  313.            NTSm_Found := True
  314.         ELSE Skip(1);
  315.         AT(75,25,SInteger(RecNo,0));
  316.       UNTIL NTSm_Found OR dEOF;
  317.       IF Not NTSm_Found THEN
  318.         BEGIN
  319.           GO(NTSRecNo); { re-position file }
  320.           ClearEOL(1,25);
  321.           Wait(NTSMsgNbr + ' not found.  Press any key...');
  322.         END;
  323.     END;
  324.   ClearEOL(1,25);
  325. END;   { NTSSrchMsgNbr }
  326.  
  327.  
  328. PROCEDURE NTSWrStatLine;
  329. BEGIN
  330.   IF NTSAddMode THEN
  331.   AT(8,2,'╣'+SInteger(RecNo+1,3)+' of '+SInteger(RecCount+1,3)+'╠══╣'+DBF+'╠══╣'+LUpdate+'╠')
  332.   ELSE
  333.   AT(8,2,'╣'+SInteger(RecNo,3)+' of '+SInteger(RecCount,3)+'╠══╣'+DBF+'╠══╣'+LUpdate+'╠');
  334.   IF dBOF OR dEOF THEN RingBell;
  335. END;   { NTSWrStatLine }
  336.  
  337. PROCEDURE NTSFormat;
  338. begin
  339.   At(6, 2,'╔═══════════════════════════════════════════════════════════════════╗');
  340.   At(6, 3,'║  Nbr  P  Handling Inst  OrigSta   Place of Origin    Time Mon Day ║');
  341.   At(6, 4,'╟───────────────────────────────────────────────────────────────────╢');
  342.   At(6, 5,'║           HX                                                      ║');
  343.   At(6, 6,'╠═══════════════════════════════════════════════════════════════════╣');
  344.   At(6, 7,'║   To:                                Phone # (   )   -            ║');
  345.   At(6, 8,'║                                                                   ║');
  346.   At(6, 9,'║                                                                   ║');
  347.   At(6,10,'║                                                                   ║');
  348.   At(6,11,'╟───────────────────────────────────────────────────────────────────╢');
  349.   At(6,12,'║                                                                   ║');
  350.   At(6,13,'║                                                                   ║');
  351.   At(6,14,'║                                                                   ║');
  352.   At(6,15,'║                                                                   ║');
  353.   At(6,16,'║                                                                   ║');
  354.   At(6,17,'╟───────────────────────────────────────────────────────────────────╢');
  355.   At(6,18,'║ From:                                Phone # (   )   -            ║');
  356.   At(6,19,'║                                                                   ║');
  357.   At(6,20,'║                                              ┌────────────────────╢');
  358.   At(6,21,'║                                              │Word Count :        ║');
  359.   At(6,22,'╚══════════════════════════════════════════════╧════════════════════╝');
  360. end;
  361.  
  362. PROCEDURE NTSDoGetsWith;
  363. BEGIN
  364.   ClrScr;
  365.   NTSFormat;
  366.   NTSWrStatLine;
  367.   NTSCountWords;
  368.   IF NTSEditMode OR NTSAddMode THEN ClearEOL(1,23);
  369.   IF NTSAddMode THEN ClearRecord;
  370.   WITH NTSHamGram DO
  371.     BEGIN
  372.       IF deleted THEN AT(60,2,'╣DELETED╠')
  373.       ELSE AT(60,2,'═════════');
  374.  
  375.       Set_FKEY(F10, @NTSF10Help);
  376.  
  377.       SayGet( 8, 5,'', _MSG_NBR,    _S, 4, 0);
  378.         Set_AutoHelp_To(@NTSAutoHelp);
  379.       SayGet(14, 5,'', _PRECEDENCE, _S, 1, 0);
  380.         Picture('!');
  381.         Set_AutoHelp_To(@NTSAutoHelp);
  382.       SayGet(20, 5,'', _HANDLING,   _S, 1, 0);
  383.         Picture('!');
  384.         Set_AutoHelp_To(@NTSAutoHelp);
  385.       SayGet(23, 5,'', _HANDL_EXT,  _S, 5, 0);
  386.         Set_AutoHelp_To(@NTSAutoHelp);
  387.       SayGet(30, 5,'', _STATION,    _S,10, 0);
  388.         Picture('@!');
  389.         Set_AutoHelp_To(@NTSAutoHelp);
  390.       SayGet(42, 5,'', _ORIGIN,     _S, 15, 0);
  391.         Set_AutoHelp_To(@NTSAutoHelp);
  392.       SayGet(61, 5,'', _FILE_TIME,  _S, 4, 0);
  393.         Set_AutoHelp_To(@NTSAutoHelp);
  394.       SayGet(66, 5,'', _FILE_MONTH, _S, 3, 0);
  395.         Picture('@!');
  396.         Set_AutoHelp_To(@NTSAutoHelp);
  397.       SayGet(70, 5,'', _FILE_DAY,   _S, 2, 0);
  398.         Set_AutoHelp_To(@NTSAutoHelp);
  399.  
  400.       SayGet(14, 7,'', _ADDRESSEE, _S, 25, 0);
  401.         Set_AutoHelp_To(@NTSAutoHelp);
  402.       SayGet(14, 8,'', _ADDR1,     _S, 25, 0);
  403.         Set_AutoHelp_To(@NTSAutoHelp);
  404.       SayGet(14, 9,'', _ADDR2,     _S, 25, 0);
  405.         Set_AutoHelp_To(@NTSAutoHelp);
  406.       SayGet(14,10,'', _CITY,      _S, 25, 0);
  407.         Set_AutoHelp_To(@NTSAutoHelp);
  408.       SayGet(41,10,'', _STATE,     _S, 2, 0);
  409.         Picture('AA');
  410.         Set_AutoHelp_To(@NTSAutoHelp);
  411.       SayGet(45,10,'', _ZIP,       _S, 5, 0);
  412.         Picture('99999');
  413.         Set_AutoHelp_To(@NTSAutoHelp);
  414.       SayGet(53, 7,'', _PHONE,     _S, 13, 0);
  415.         Picture('(999)999-9999');
  416.         Set_AutoHelp_To(@NTSAutoHelp);
  417.  
  418.       SayGet(8,12,'', _TEXT_1, _S, 65, 0);
  419.         Set_AutoHelp_To(@NTSAutoHelp);
  420.       SayGet(8,13,'', _TEXT_2, _S, 65, 0);
  421.         Set_AutoHelp_To(@NTSAutoHelp);
  422.       SayGet(8,14,'', _TEXT_3, _S, 65, 0);
  423.         Set_AutoHelp_To(@NTSAutoHelp);
  424.       SayGet(8,15,'', _TEXT_4, _S, 65, 0);
  425.         Set_AutoHelp_To(@NTSAutoHelp);
  426.       SayGet(8,16,'', _TEXT_5, _S, 65, 0);
  427.         Set_AutoHelp_To(@NTSAutoHelp);
  428.  
  429.       SayGet(14,18,'', _SIGN,      _S, 25, 0);
  430.         Set_AutoHelp_To(@NTSAutoHelp);
  431.       SayGet(14,19,'', _SIGN_ADR1, _S, 25, 0);
  432.         Set_AutoHelp_To(@NTSAutoHelp);
  433.       SayGet(14,20,'', _SIGN_ADR2, _S, 25, 0);
  434.         Set_AutoHelp_To(@NTSAutoHelp);
  435.       SayGet(14,21,'', _SIGN_CITY, _S, 25, 0);
  436.         Set_AutoHelp_To(@NTSAutoHelp);
  437.       SayGet(41,21,'', _SIGN_ST,   _S, 2, 0);
  438.         Picture('AA');
  439.         Set_AutoHelp_To(@NTSAutoHelp);
  440.       SayGet(45,21,'', _SIGN_ZIP,  _S, 5, 0);
  441.         Picture('99999');
  442.         Set_AutoHelp_To(@NTSAutoHelp);
  443.       SayGet(53,18,'', _SIGN_PHN,  _S, 13, 0);
  444.         Picture('(999)999-9999');
  445.         Set_AutoHelp_To(@NTSAutoHelp);
  446.  
  447.       IF NTSEditMode OR NTSAddMode THEN
  448.         BEGIN
  449.           ReadGets;  { edit the fields defined with SayGet() }
  450.           IF EditResult <= 0 THEN
  451.             BEGIN
  452.               IF NTSAddMode THEN
  453.                 BEGIN
  454.                   Append;
  455.                   NTSAddMode := False;
  456.                   NTSWrStatLine;
  457.                 END
  458.               ELSE Replace;
  459.             END
  460.         END
  461.       ELSE ClearGets; { just display the fields }
  462.     END;
  463.     NTSCountWords;
  464.   ClearEOL(1,24);
  465. END;       { NTSDoGetsWith }
  466.  
  467.  
  468. PROCEDURE NTSMakeFile(NewFile : String);
  469. VAR
  470.     DataBase  : DbfRecord;
  471.     FieldList : FieldArray;
  472. BEGIN
  473.   WriteLn('Creating '+NewFile+'...');
  474.   FillChar(FieldList,SizeOf(FieldList), 0);
  475.   FieldList[1].Name := 'MSG_NBR';
  476.   FieldList[1].Typ  := 'C';
  477.   FieldList[1].Len  := 4;
  478.   FieldList[2].Name := 'PRECEDENCE';
  479.   FieldList[2].Typ  := 'C';
  480.   FieldList[2].Len  := 1;
  481.   FieldList[3].Name := 'HANDLING';
  482.   FieldList[3].Typ  := 'C';
  483.   FieldList[3].Len  := 1;
  484.   FieldList[4].Name := 'HANDL_EXT';
  485.   FieldList[4].Typ  := 'C';
  486.   FieldList[4].Len  := 5;
  487.   FieldList[5].Name := 'STATION';
  488.   FieldList[5].Typ  := 'C';
  489.   FieldList[5].Len  := 10;
  490.   FieldList[6].Name := 'ORIGIN';
  491.   FieldList[6].Typ  := 'C';
  492.   FieldList[6].Len  := 15;
  493.   FieldList[7].Name := 'FILE_TIME';
  494.   FieldList[7].Typ  := 'C';
  495.   FieldList[7].Len  := 4;
  496.   FieldList[8].Name := 'FILE_MONTH';
  497.   FieldList[8].Typ  := 'C';
  498.   FieldList[8].Len  := 3;
  499.   FieldList[9].Name := 'FILE_DAY';
  500.   FieldList[9].Typ  := 'C';
  501.   FieldList[9].Len  := 2;
  502.   FieldList[10].Name := 'ADDRESSEE';
  503.   FieldList[10].Typ  := 'C';
  504.   FieldList[10].Len  := 25;
  505.   FieldList[11].Name := 'ADDR1';
  506.   FieldList[11].Typ  := 'C';
  507.   FieldList[11].Len  := 25;
  508.   FieldList[12].Name := 'ADDR2';
  509.   FieldList[12].Typ  := 'C';
  510.   FieldList[12].Len  := 25;
  511.   FieldList[13].Name := 'CITY';
  512.   FieldList[13].Typ  := 'C';
  513.   FieldList[13].Len  := 25;
  514.   FieldList[14].Name := 'STATE';
  515.   FieldList[14].Typ  := 'C';
  516.   FieldList[14].Len  := 2;
  517.   FieldList[15].Name := 'ZIP';
  518.   FieldList[15].Typ  := 'C';
  519.   FieldList[15].Len  := 5;
  520.   FieldList[16].Name := 'PHONE';
  521.   FieldList[16].Typ  := 'C';
  522.   FieldList[16].Len  := 13;
  523.   FieldList[17].Name := 'TEXT_1';
  524.   FieldList[17].Typ  := 'C';
  525.   FieldList[17].Len  := 65;
  526.   FieldList[18].Name := 'TEXT_2';
  527.   FieldList[18].Typ  := 'C';
  528.   FieldList[18].Len  := 65;
  529.   FieldList[19].Name := 'TEXT_3';
  530.   FieldList[19].Typ  := 'C';
  531.   FieldList[19].Len  := 65;
  532.   FieldList[20].Name := 'TEXT_4';
  533.   FieldList[20].Typ  := 'C';
  534.   FieldList[20].Len  := 65;
  535.   FieldList[21].Name := 'TEXT_5';
  536.   FieldList[21].Typ  := 'C';
  537.   FieldList[21].Len  := 65;
  538.   FieldList[22].Name := 'SIGN';
  539.   FieldList[22].Typ  := 'C';
  540.   FieldList[22].Len  := 25;
  541.   FieldList[23].Name := 'SIGN_ADR1';
  542.   FieldList[23].Typ  := 'C';
  543.   FieldList[23].Len  := 25;
  544.   FieldList[24].Name := 'SIGN_ADR2';
  545.   FieldList[24].Typ  := 'C';
  546.   FieldList[24].Len  := 25;
  547.   FieldList[25].Name := 'SIGN_CITY';
  548.   FieldList[25].Typ  := 'C';
  549.   FieldList[25].Len  := 25;
  550.   FieldList[26].Name := 'SIGN_ST';
  551.   FieldList[26].Typ  := 'C';
  552.   FieldList[26].Len  :=  2;
  553.   FieldList[27].Name := 'SIGN_ZIP';
  554.   FieldList[27].Typ  := 'C';
  555.   FieldList[27].Len  :=  5;
  556.   FieldList[28].Name := 'SIGN_PHN';
  557.   FieldList[28].Typ  := 'C';
  558.   FieldList[28].Len  := 13;
  559.   CreateDBF(DataBase, NewFile, 28, @FieldList);
  560. END;
  561.  
  562. PROCEDURE NTSWriteHamGram;
  563. var txt : text;
  564. begin
  565.   Assign(txt,'MSG'+TRIM(NTSHamGram._MSG_NBR));
  566.   ReWrite(txt);
  567.   with NTSHamGram do
  568.   begin
  569.     write(txt,_MSG_NBR:4,
  570.               _PRECEDENCE:2,' ');
  571.     if TRIM(_HANDL_EXT) <> '' then
  572.       write(txt,'HX', _HANDLING:1);
  573.     if TRIM(_HANDL_EXT) <> '' then
  574.       write(txt,_HANDL_EXT:6);
  575.     writeln(txt,_STATION:11,
  576.                 NTSWordCount:4,
  577.                 _ORIGIN:16,
  578.                 _FILE_TIME:5,
  579.                 _FILE_MONTH:4,
  580.                 _FILE_DAY:3);
  581.     writeln(txt);
  582.     writeln(txt,_ADDRESSEE);
  583.     if TRIM(_ADDR1) <> '' then
  584.       writeln(txt,TRIM(_ADDR1));
  585.     if TRIM(_ADDR2) <> '' then
  586.       writeln(txt,TRIM(_ADDR2));
  587.     if TRIM(_CITY) <> '' then
  588.       write(txt,TRIM(_CITY));
  589.     if TRIM(_STATE) <> '' then
  590.       write(txt,' ',_STATE);
  591.     if TRIM(_ZIP) <> '' then
  592.       write(txt,' ',_ZIP);
  593.     writeln(txt);
  594.     if _PHONE[6] <> ' ' then
  595.       writeln(txt,_PHONE);
  596.     writeln(txt);
  597.     if TRIM(_TEXT_1) <> '' then
  598.       writeln(txt,TRIM(_TEXT_1));
  599.     if TRIM(_TEXT_2) <> '' then
  600.       writeln(txt,TRIM(_TEXT_2));
  601.     if TRIM(_TEXT_3) <> '' then
  602.       writeln(txt,TRIM(_TEXT_3));
  603.     if TRIM(_TEXT_4) <> '' then
  604.       writeln(txt,TRIM(_TEXT_4));
  605.     if TRIM(_TEXT_5) <> '' then
  606.       writeln(txt,TRIM(_TEXT_5));
  607.     writeln(txt);
  608.     writeln(txt,TRIM(_SIGN));
  609.     if TRIM(_SIGN_ADR1) <> '' then
  610.       writeln(txt,TRIM(_SIGN_ADR1));
  611.     if TRIM(_SIGN_ADR2) <> '' then
  612.       writeln(txt,TRIM(_SIGN_ADR2));
  613.     if TRIM(_SIGN_CITY) <> '' then
  614.       write(txt,TRIM(_SIGN_CITY));
  615.     if TRIM(_SIGN_ST) <> '' then
  616.       write(txt,' ',_SIGN_ST);
  617.     if TRIM(_SIGN_ZIP) <> '' then
  618.       write(txt,' ',_SIGN_ZIP);
  619.     writeln(txt);
  620.     if _SIGN_PHN[6] <> ' ' then
  621.       writeln(txt,_SIGN_PHN);
  622.     close(txt);
  623.   end;
  624. end;
  625.  
  626. PROCEDURE NTSInitialize;
  627. BEGIN
  628.   Set_Escape_On;   { affects SayGet commands }
  629.   Set_Safety_Off;  { affects Pack command }
  630.   Set_BrowseWindow_TO(15,5,75,19,2,'');
  631.   if (NTSdBaseFile = '') then
  632.     NTSdBaseFile := 'HAMGRAM.DBF';
  633.   Select(3);
  634.   NTSOurWorkArea := CurrentArea;
  635.   IF NOT FileExists(NTSdBaseFile)
  636.      THEN NTSMakeFile(NTSdBaseFile);
  637.   USE(NTSdBaseFile, @NTSHamGram, SizeOf(NTSHamGram)); { open the file }
  638.   IF RecCount = 0 THEN Append; { don't allow an empty database }
  639.   NTSEditMode := False;
  640.   NTSAddMode  := False;
  641.   NTSMsgNbr := '';
  642. END;  { Initialize }
  643.  
  644. PROCEDURE KamGram;
  645. var VidBuffer : array[1..4000] of byte;
  646.     VidX, VidY : byte;
  647. begin
  648.   FillPage(@VidBuffer);
  649.   VidX := WhereX;
  650.   VidY := WhereY;
  651.   NTSOldColors := TextAttr;
  652.   SayGetColors;
  653.   ClrScr;
  654.   Select(NTSOurWorkArea);
  655.   Set_FKey(F1,@EditHelp);
  656.   Set_Cursor_Off;
  657.   REPEAT
  658.     NTSDoGetsWith;  { display (or edit) the current record }
  659.     AT(3,23,'N)ext P)rev T)op B(O)t G)o S)rch E)dit A)dd D)el B)row Pa(C)k W)rite Q)uit');
  660.     AT(34,24,'<F1> for HELP');
  661.     REPEAT
  662.       NTSChoice := UpCase(ReadKey);       { get user request }
  663.       IF NTSChoice = CHR(0) THEN  { user pressed a special key }
  664.         BEGIN
  665.           NTSChoice := ReadKey;
  666.           Case NTSChoice Of
  667.             'P' : NTSChoice := 'N';  { map down-arrow to "Next"   }
  668.             'H' : NTSChoice := 'P';  { map up-arrow to "Previous" }
  669.             ';' : NTSChoice := 'H';  { map F1 to "Help" }
  670.             ELSE NTSChoice := ' ';   { ignore other special keys  }
  671.           END;
  672.         END;
  673.     UNTIL POS(NTSChoice,'ABCDEGHNOPQSTW') > 0;
  674.     NTSEditMode := False;
  675.     NTSAddMode  := False;
  676.     CASE NTSChoice OF
  677.       'N' : BEGIN
  678.               Skip(1);
  679.               IF dEOF THEN GoBottom;
  680.             END;
  681.       'P' : Skip(-1);
  682.       'E' : NTSEditMode := True;
  683.       'A' : NTSAddMode  := True;
  684.       'H' : NTSHelpScreen;
  685.       'D' : { toggle the "Deleted" flag }
  686.             IF NTSHamGram.Deleted THEN RecallRec ELSE DeleteRec;
  687.       'T' : GoTop;     { position database at first record }
  688.       'O' : GoBottom;  { position database at last record }
  689.       'B' : BEGIN
  690.               Browse(
  691.                 'FIELDS [MSG_NBR "Nbr", ADDRESSEE "To", SIGN "From"] NOMODIFY');
  692.               ClrScr;
  693.             END;
  694.       'S' : NTSSrchMsgNbr;
  695.       'G' : BEGIN  { GO }
  696.               MRecNO := 1;
  697.               SayGet(1,25,' Enter record number: ',NTSRecNo,_LI,6,0);
  698.               Range('1',SInteger(RecCount,0));
  699.               Set_Repaint_Off;
  700.               ReadGets;
  701.               Set_Repaint_On;
  702.               IF EditResult <= 0 THEN GO(NTSRecNo);
  703.               AT(1,25,Space(78));
  704.              END;
  705.       'C' : BEGIN  { Pack }
  706.               ClrScr;
  707.               WriteLn('Removing deleted records...');
  708.               Set_Talk_On;
  709.               Pack;
  710.               GoTop;
  711.               ClrScr;
  712.              END;
  713.       'W' : NTSWriteHamGram;
  714.     END; { Case }
  715.   UNTIL NTSChoice = 'Q';
  716.   Set_Cursor_On;
  717.   DisplayPage(@VidBuffer);
  718.   GotoXY(VidX,VidY);
  719.   TextAttr := NTSOldColors;
  720. END;
  721.